/*
 * @lc app=leetcode.cn id=917 lang=java
 *
 * [917] 仅仅反转字母
 *
 * https://leetcode-cn.com/problems/reverse-only-letters/description/
 *
 * algorithms
 * Easy (52.64%)
 * Likes:    33
 * Dislikes: 0
 * Total Accepted:    7.5K
 * Total Submissions: 14.2K
 * Testcase Example:  '"ab-cd"'
 *
 * 给定一个字符串 S，返回 “反转后的” 字符串，其中不是字母的字符都保留在原地，而所有字母的位置发生反转。
 *
 *
 *
 *
 *
 *
 * 示例 1：
 *
 * 输入："ab-cd"
 * 输出："dc-ba"
 *
 *
 * 示例 2：
 *
 * 输入："a-bC-dEf-ghIj"
 * 输出："j-Ih-gfE-dCba"
 *
 *
 * 示例 3：
 *
 * 输入："Test1ng-Leet=code-Q!"
 * 输出："Qedo1ct-eeLg=ntse-T!"
 *
 *
 *
 *
 * 提示：
 *
 *
 * S.length <= 100
 * 33 <= S[i].ASCIIcode <= 122 
 * S 中不包含 \ or "
 *
 *
 */

// @lc code=start
class Solution {
    public String reverseOnlyLetters(String S) {
        char[] data = S.toCharArray();
        int left = 0, right = data.length - 1;
        while(left < right) {
            while(left < right && !isAlpha(data[left]) ) {
                left++;
            }
            while(left < right && !isAlpha(data[right]) ) {
                right--;
            }
            char c = data[left];
            data[left++] = data[right];
            data[right--] = c;

        }
        return new String(data);
    }

    boolean isAlpha(char c) {
        return 'a' - 1 < c && c < 'z' + 1 || 'A' - 1 < c && c < 'Z' + 1;
    }
}
// @lc code=end

